import 'package:flutter/material.dart';
import 'package:nft_shop/my/model/models.dart';
import 'package:nft_shop/net/service_repository.dart';
import 'package:nft_shop/res/constant.dart';
import 'package:nft_shop/res/global.dart';
import 'package:nft_shop/widgets/my_app_bar.dart';
import 'package:nft_shop/widgets/status_view.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';

class MyLogHistoryPage extends StatefulWidget {
  @override
  _MyLogHistoryPageState createState() => _MyLogHistoryPageState();
}

class _MyLogHistoryPageState extends State<MyLogHistoryPage> {
  /// 分页第一页页码
  static const int pageNumFirst = 1;
  /// 当前第几页
  int currentPageNum = pageNumFirst;
  /// 分页条目数量
  int pageSize = 20;
  /// 页面数据
  List list = [];
  ///状态
  int _status = LoadStatusType.loading;

  int get status => _status;

  set status(int value) {
    _status = value;
    setState(() {

    });
  }

  RefreshController refreshController = RefreshController(initialRefresh: false);


  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    refresh();
  }

  //获取数据
  Future<List> loadData({int? pageNum}) async {
    return await ServiceRepository.getloginLog(pageNum!,);

  }

  /// 下拉刷新
  ///
  /// [init] 是否是第一次加载
  /// true:  Error时,需要跳转页面
  /// false: Error时,不需要跳转页面,直接给出提示
  Future<List?> refresh({bool init = false}) async {
    try {
      currentPageNum = pageNumFirst;
      var data = await loadData(pageNum: pageNumFirst);
      if (data.isEmpty) {
        refreshController.refreshCompleted(resetFooterState: true);
        list.clear();
        status = LoadStatusType.empty;
      } else {
        list.clear();
        list.addAll(data);
        refreshController.refreshCompleted();
        // 小于分页的数量,禁止上拉加载更多
        if (data.length < pageSize) {
          refreshController.loadNoData();
        } else {
          //防止上次上拉加载更多失败,需要重置状态
          refreshController.loadComplete();
        }
        status = LoadStatusType.success;
      }
      return data;
    } catch (e, s) {
      /// 页面已经加载了数据,如果刷新报错,不应该直接跳转错误页面
      /// 而是显示之前的页面数据.给出错误提示
      if (init) list.clear();
      refreshController.refreshFailed();
      status = LoadStatusType.empty;
      // setError(e, s);
      return null;
    }
  }

  /// 上拉加载更多
  Future<List?> loadMore() async {
    try {
      var data = await loadData(pageNum: ++currentPageNum);
      if (data.isEmpty) {
        currentPageNum--;
        refreshController.loadNoData();
      } else {
        list.addAll(data);
        if (data.length < pageSize) {
          refreshController.loadNoData();
        } else {
          refreshController.loadComplete();
        }
        setState(() {

        });
      }
      return data;
    } catch (e, s) {
      currentPageNum--;
      refreshController.loadFailed();
      return null;
    }
  }


  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: MyAppBar(
        centerTitle: "登录设备",
      ),
      body: Builder(
        builder: (context) {
          if(status != LoadStatusType.success){
            return StatusViews(status);
          }
          return SmartRefresher(
            controller: refreshController,
            header: WaterDropHeader(),
            footer: ClassicFooter(),
            onRefresh: refresh,
            onLoading: loadMore,
            enablePullUp: true,
            child: ListView.builder(
              itemCount: list.length,
              physics: const AlwaysScrollableScrollPhysics(),
              itemBuilder: (_, index) => LogHistoryItem(list[index],index == list.length-1?true:false),
            ),
          );
        }
      ),
    );
  }

  Widget LogHistoryItem(LoginLog item,bool isLast){
    return Container(
      height: isLast?118:126,
      child: Column(
        children: [
          Container(
            padding: EdgeInsets.symmetric(horizontal: 16),
            height: 58,
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Text("登录设备",style: TextStyle(fontSize: 14,color: Global.kTheme.textPrimary6,fontFamily: Global.myRegularFont),),
                Text(item.mobileMark??"",style: TextStyle(fontSize: 14,color: Global.kTheme.textPrimary1,fontFamily: Global.mySemiboldFont,),)
              ],
            ),
          ),
          Padding(
            padding: const EdgeInsets.only(left: 17),
            child: Divider(
              thickness: 1,
              color: Global.kTheme.colorLine,
            ),
          ),
          Container(
            padding: EdgeInsets.symmetric(horizontal: 16),
            height: 58,
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Text("日期",style: TextStyle(fontSize: 14,color: Global.kTheme.textPrimary6,fontFamily: Global.myRegularFont,),),
                Text(item.createTime??"",style: TextStyle(fontSize: 14,color: Global.kTheme.textPrimary1,fontFamily: Global.myDINFont,),)
              ],
            ),
          ),
          Visibility(
              visible: isLast?false:true,
              child:Container(
                height: 8,
                color: Global.kTheme.colorBackground4,
              ) )
        ],
      ),
    );
  }

}
